package unicall.em.models.vo;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;

import org.springframework.data.jpa.domain.Specification;

import unicall.em.models.Media;
import unicall.em.utils.StringUtil;

public class MediaSpec implements Specification<Media> {
    private final Media media;

    public MediaSpec(Media media) {
        this.media = media;
    }

    @Override
    public Predicate toPredicate(Root<Media> root, CriteriaQuery<?> cq, CriteriaBuilder cb) {
        List<Predicate> predicates = new ArrayList<Predicate>();
        predicates.add(cb.equal(root.get(Media_.status),"USE")); 
        if (!StringUtil.isBlank(media.getName())) {
            predicates.add(
                    cb.like(cb.lower(root.get(Media_.name)), media.getName().toLowerCase() + "%"));
        }
        if (!StringUtil.isBlank(media.getCategory())) {
            predicates.add(cb.equal(root.get(Media_.category), media.getCategory()));
        }
        return cb.and(predicates.toArray(new Predicate[0]));
    }

}
